package com.enzo.prms.common.base.dao;

import java.util.List;
import java.util.Map;

import com.enzo.prms.common.exception.base.DAOException;
import com.mysql.jdbc.Connection;

/**
 * 可以执行存储过程的DAO。
 * 
 * @author Chen Yiqun
 * @version 1.0
 */
public interface ExecutableDao extends Dao {
	/**
     * 执行无参数和返回值的存储过程。
     * 
     * @param spName 存储过程名。
     * @throws SwiftDaoException    
     */
    void execute(String spName) throws DAOException;

    /**
     * 执行无返回值的存储过程
     * 
     * @param spName 存储过程名。
     * @param parameters 存储过程参数。
     * @throws SwiftDaoException
     */
    void execute(String spName, Map<String, Object> parameters) throws DAOException;

    /**
     * 
     * @param spName
     * @param parameters
     * @param outParams
     * @param cursorName
     * @return
     * @throws SwiftDaoException
     */
    Map<String, Object> executeWithResult(String spName, Map<String, Object> parameters,
                    Map<String, Integer> outParams, String cursorName) throws DAOException;

    /**
     * 
     * @param conn
     * @param spName
     * @param parameters
     * @param outParams
     * @param cursorName
     * @return
     * @throws SwiftDaoException
     */
    Map<String, Object> executeWithResult(Connection conn, String spName, Map<String, Object> parameters,
                    Map<String, Integer> outParams, String cursorName) throws DAOException;

    /**
     * 执行存储过程并返回多条记录。
     * 
     * @param spName
     * @return
     * @throws SwiftDaoException
     */
    List<Object> executeWithResultset(String spName) throws DAOException;

    /**
     * 执行带参数的存储过程并返回多条记录。
     * 
     * @param spName
     * @param parameters
     * @return
     * @throws SwiftDaoException
     */
    List<Object>  executeWithResultset(String spName, Map<String, Object> parameters) throws DAOException;
}
